#include <stdio.h>
#include <unistd.h>
#include "smartdoor.h"

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_io.h"  
#include "hi_gpio.h" 
#include "hi_pwm.h"
#include "iot_gpio.h"
#include "iot_errno.h"
#include "globalvars.h"

#define     IOT_GPIO_IDX_12         12
#define     IOT_GPIO_PWM_FUNCTION   5
#define     IOT_PWM_PORT_PWM3       3

int g_door_flag = 0;
// int g_door_alarm_status = 0;

//pwm引脚初始化
void Door_gpio_init(void)
{
	/* GPIO初始化 */
	hi_gpio_init();
    // IoTGpioInit(IOT_GPIO_IDX_12);
    // hi_io_set_func(IOT_GPIO_IDX_12, IOT_GPIO_PWM_FUNCTION);
    // IoTGpioSetDir(IOT_GPIO_IDX_12, IOT_GPIO_DIR_OUT);
    // IoTPwmInit(IOT_PWM_PORT_PWM3);  
    hi_io_set_func(HI_GPIO_IDX_10, HI_IO_FUNC_GPIO_10_GPIO);  //设置GPIO_7引脚为正常GPIO功能  
	hi_gpio_set_dir(HI_GPIO_IDX_10, HI_GPIO_DIR_OUT);
    // hi_gpio_set_ouput_val(HI_GPIO_IDX_6, 0);
    hi_io_set_func(HI_GPIO_IDX_11, HI_IO_FUNC_GPIO_11_GPIO);  //设置GPIO_7引脚为正常GPIO功能  
	hi_gpio_set_dir(HI_GPIO_IDX_11, HI_GPIO_DIR_OUT);
    // hi_gpio_set_ouput_val(HI_GPIO_IDX_4, 0);
}

/** 中断响应函数 **/
void Door_gpio_irqhandler(void)
{
    if(g_door_flag == 0)
    {
        g_door_flag = 1;
    }
      //检测到人员靠
    return;
}

void Door_gpio_irq(void)
{
	uint32_t ret;
// 	/* 中断GPIO初始化 */
	hi_io_set_func(HI_GPIO_IDX_6, HI_IO_FUNC_GPIO_6_GPIO);  //设置GPIO_7引脚为正常GPIO功能  
	hi_gpio_set_dir(HI_GPIO_IDX_6, HI_GPIO_DIR_IN);  //设置GPIO_7为输入模式 
    hi_io_set_pull(HI_GPIO_IDX_6, HI_IO_PULL_UP);
	//gpio7脚中断创建  
    ret = hi_gpio_register_isr_function(HI_GPIO_IDX_6, HI_INT_TYPE_EDGE, HI_GPIO_EDGE_RISE_LEVEL_HIGH, Door_gpio_irqhandler, NULL);
    if (ret != 0)
	{
		//中断创建失败  
		printf("  GPIO interrupt init failed!!!\r\n");
		return;
	}
	return;
	}

void Door_init(void)
{
	Door_gpio_init();  //门GPIO引脚初始化   
	Door_gpio_irq();  //人体热释电红外引脚中断初始化   
	printf("  Door init succeed!!!\r\n"); 
}

//控制电机的停止、正转、反转
void Door_switch(int flag)
{
    if (flag == 0)  //电机停止
	{
        printf("  !!***************!!\n");
		printf("  !!    stopdoor   !!\n");
		printf("  !!***************!!\r\n");
        hi_gpio_set_ouput_val(HI_GPIO_IDX_10, 0);
        hi_gpio_set_ouput_val(HI_GPIO_IDX_11, 0);
	}
	if (flag == 1)  //电机正转
	{   
        hi_gpio_set_ouput_val(HI_GPIO_IDX_10, 1);
        hi_gpio_set_ouput_val(HI_GPIO_IDX_11, 0);
        printf("  !!***************!!\n");
		printf("  !!    opendoor   !!\n");
		printf("  !!***************!!\r\n");
	}
    if (flag == 2) //电机反转
    {
        hi_gpio_set_ouput_val(HI_GPIO_IDX_11, 1);
        hi_gpio_set_ouput_val(HI_GPIO_IDX_10, 0);
        printf("  !!***************!!\n");
		printf("  !!   closedoor   !!\n");
		printf("  !!***************!!\r\n");
    }
}

// void Security_alarm(int flag)
// {
//     if(flag == 1)
//     {
//         // g_door_alarm_status = 1;
//         printf("  !!***************!!\n");
// 		printf("  !!     doorAlarm     !!\n");
// 		printf("  !!***************!!\r\n");
//         // IoTPwmStart(IOT_PWM_PORT_PWM3, 50, 4000);
//     }
//     if(flag == 0)
//     {
//         // g_door_alarm_status = 0;
//         // IoTPwmStop(IOT_PWM_PORT_PWM3);
//         printf("  !!***************!!\n");
// 		printf("  !!   doorstopAlarm  !!\n");
// 		printf("  !!***************!!\r\n");
//     }
// }